1. Field of the Invention
This invention relates to the field of data processing systems. More particularly, this invention relates to the automatic generation of test programs used to test data processing systems.
2. Description of the Prior Art
It is known to produce long sequences of program instructions which can be executed by a data processing system to test that data processing system. The tests can take a wide variety of forms. In one form the design of a data processing system may be checked by simulating execution of a test program with both an instruction set simulator and an RTL model of the data processing system so as to confirm that the final resulting state after execution is the same indicating that the RTL model is correctly representing the desired data processing system. At another level, test programs may be run to verify gate level design, e.g. upon FPGA to verify a design, on prototype manufactured products to verify their design or their correct manufacture, etc. Test programs to stimulate a data processing system will be seen from the above to have wide applicability. The thorough and rapid testing of data processing systems is becoming increasingly important as data processing system designs increase in complexity and there is a need to speed their development.
In order to achieve a high quality test it is desirable that a test program should stimulate the data processing system concerned to adopt a wide variety of possible functional states from within all possible functional states so as to increase the probability of detecting malfunctions or errors in the data processing system. In order to achieve such broad ranging test program coverage it has previously been known to handwrite test programs; a programmer with an extensive knowledge of the data processing system under test can use this knowledge to select sequences of program instructions which will stimulate a broad range of the different circuit elements and operations of the data processing system such that errors therein may be uncovered. However, as data processing systems increase in complexity and less time is available for producing test programs it is difficult for such test programs to be manually created in this way. The manual creation is also highly skilled, labour intensive and accordingly expensive.
It is known to automatically generate test programs for CPU testing using genetic algorithms. However, these known methods are highly constrained due to their use of static code generation and they are not able to determine the quality or correctness of the test coverage of the functional states of the system since they concentrate on RTL code coverage as their metric for feedback in the automatic generation.